
#ifndef CONTROLNODE_HPP_
#define CONTROLNODE_HPP_

#include <string>

#define NODE_STATUS_LEN 4

using namespace std;

/**
 * Class ControlNode: su instancia es un nodo previo
 * al que se inserte en el grafo, para propositos de
 * control de cantidad de campos y formato de los
 * mismos.
 */
class ControlNode {
private:
	std::string	nodeId;
	int			positionX;
	int 		positionY;
	int			status[NODE_STATUS_LEN];


public:

	/**
	 * Constructor por defecto de la clase ControlNode.
	 */
	ControlNode();

	/**
	 * Destructor de la clase ControlNode.
	 */
	virtual ~ControlNode();

	/**
	 * Metodo getter del id del nodo de control.
	 * @return Retorna el id del nodo de control.
	 */
	std::string getNodeId();

	/**
	 * Metodo setter del id del nodo de control.
	 * @param id de clase std::string
	 */
	void setNodeId(std::string id);

	/**
	 * Metodo getter de la posicion X del nodo de control.
	 * @return Retorna la posicion X.
	 */
	int getPositionX();

	/**
	 * Metodo getter de la posicion Y del nodo de control.
	 * @return Retorna la posicion Y.
	 */
	int getPositionY();

	/**
	 * Metodo setter de la posicion X del nodo de control.
	 * @param value de tipo float.
	 */
	void setPositionX(int value);

	/**
	 * Metodo setter de la posicion Y del nodo de control.
	 * @param value de tipo float.
	 */
	void setPositionY(int value);

	/**
	 * Metodo getter del estatus del id del nodo de
	 * control.
	 * @return 1 si el estatus es valido.
	 * @return 0 si el estatus no es valido.
	 */
	int getNodeIdStatus();

	/**
	 * Metodo getter del estatus de la posicion X del
	 * nodo de control.
	 * @return 1 si el estatus es valido.
	 * @return 0 si el estatus no es valido.
	 */
	int getPositionXStatus();

	/**
	 * Metodo getter del estatus de la posicion Y del
	 * nodo de control.
	 * @return 1 si el estatus es valido.
	 * @return 0 si el estatus no es valido.
	 */
	int getPositionYStatus();

	/**
	 * Metodo getter del estatus de la cantidad campos
	 * del nodo de control.
	 * @return 1 si el estatus es valido.
	 * @return 0 si el estatus no es valido.
	 */
	int getNumberOfFieldsStatus();

	/**
	 * Metodo setter para marcar como estatus no valido
	 * el numero de campo pasado por parametro.
	 * @param fieldNumber de tipo int
	 */
	void setFailStatus(int fieldNumber);

	/**
	 * Metodo setter para marcar como estatus valido
	 * el numero de campo pasado por parametro.
	 * @param fieldNumber de tipo int.
	 */
	void setSuccessStatus(int fieldNumber);

	/**
	 * Refresca los datos del nodo de control para
	 * dejarla como recién creada.
	 */
	void clear();


};

#endif /* CONTROLNODE_HPP_ */
